CSSã®scroll-marginã«é¢ããå æ¬çãªã¬ã€ããã¢ã³ã«ãŒãªã³ã¯ããªãã»ããããåºå®ããããŒããããµã€ãã§ã®ã¹ã ãŒãºãªããã²ãŒã·ã§ã³ãå®çŸããŸããããè¯ããŠãŒã¶ãŒäœéšã®ããã®å®è·µçãªå®è£ ãã¯ããã¯ãåŠã³ãŸãããã
CSS scroll-margin: åºå®ããããŒã®ãªãã»ããã¢ã³ã«ãŒããã¹ã¿ãŒãã
åºå®ããããŒãããé·ããŠã§ãããŒãžãããã²ãŒãããéããŠãŒã¶ãŒäœéšãæãªãããããšããããããŸãããŠãŒã¶ãŒãã¢ã³ã«ãŒãªã³ã¯ãã¯ãªãã¯ãããšããã©ãŠã¶ã¯ã¿ãŒã²ããèŠçŽ ã«ãžã£ã³ãããŸãããåºå®ããããŒããã®èŠçŽ ã®äžéšãèŠãé ããŠããŸããŸããããã§åœ¹ç«ã€ã®ãCSSã®scroll-margin
ãšscroll-padding
ã§ãããããã¯ã¢ã³ã«ãŒãªã³ã¯ããªãã»ãããããã·ãŒã ã¬ã¹ãªããã²ãŒã·ã§ã³ãä¿èšŒãããã·ã³ãã«ãã€åŒ·åãªæ¹æ³ãæäŸããŸãã
åé¡ã®çè§£ïŒåºå®ããããŒã«ãã劚害
åºå®ããããŒã¯çŸä»£ã®ãŠã§ããµã€ãã§äžè¬çãªãã¶ã€ã³èŠçŽ ã§ãããæ°žç¶çãªããã²ãŒã·ã§ã³ãæäŸããããšã§ãŠãŒã¶ããªãã£ãåäžãããŸãããããããããã¯åé¡ãåŒãèµ·ãããŸãããŠãŒã¶ãŒãããŒãžå ã®ç¹å®ã»ã¯ã·ã§ã³ãæãå éšãªã³ã¯ïŒã¢ã³ã«ãŒãªã³ã¯ïŒãã¯ãªãã¯ãããšããã©ãŠã¶ã¯ã¿ãŒã²ããèŠçŽ ããã¥ãŒããŒãã®æäžéšãŸã§ã¹ã¯ããŒã«ããŸããåºå®ããããŒãååšããå Žåããããã¿ãŒã²ããèŠçŽ ã®äžéšãèŠãé ãããŠãŒã¶ãŒãèŠãããšããŠããã³ã³ãã³ããããã«èŠãããšãå°é£ã«ããŸããããã¯ãç»é¢ãå°ããã¢ãã€ã«ããã€ã¹ã§ã¯ç¹ã«åé¡ãšãªãåŸãŸããæ±äº¬ã«ãããŠãŒã¶ãŒãã¹ããŒããã©ã³ã§é·ããã¥ãŒã¹èšäºãèªãã§ããŠãç¹å®ã®ã»ã¯ã·ã§ã³ãžã®ã¢ã³ã«ãŒãªã³ã¯ãã¯ãªãã¯ãããšããããã®ã»ã¯ã·ã§ã³ãããããŒã«éšåçã«é ããŠããŸãç¶æ³ãæ³åããŠã¿ãŠãã ããããã®äžæã¯ãå šäœçãªãŠãŒã¶ãŒäœéšãäœäžãããŸãã
scroll-margin
ãšscroll-padding
ã®ç޹ä»
CSSã¯ãã®åé¡ã解決ããã®ã«åœ¹ç«ã€2ã€ã®ããããã£ãæäŸããŠããŸããscroll-margin
ãšscroll-padding
ã§ãããããã¯äŒŒãŠããããã«èŠããŸãããåããç°ãªããã¹ã¯ããŒã«æåã®ç°ãªãåŽé¢ã«äœçšããŸãã
scroll-margin
: ãã®ããããã£ã¯ãã¹ã¯ããŒã«æã®èŠçŽ ãšãã¥ãŒããŒãéã®æå°ããŒãžã³ãèšå®ããŸããã¢ã³ã«ãŒãªã³ã¯çµç±ã§ãã¥ãŒã«ã¹ã¯ããŒã«ããããšãã«ãã¿ãŒã²ããèŠçŽ ã®åšãã«è¿œå ã®ã¹ããŒã¹ãå ãããã®ã ãšèããŠãã ãããããã¯ã¿ãŒã²ããèŠçŽ èªäœã«é©çšãããŸããscroll-padding
: ãã®ããããã£ã¯ãã¹ã¯ããŒã«ããŒãïŒã¹ã¯ããŒã«ã³ã³ãããéåžžã¯<body>
èŠçŽ ãã¹ã¯ããŒã«å¯èœãªdivïŒã®ããã£ã³ã°ãå®çŸ©ããŸããæ¬è³ªçã«ã¯ãã¹ã¯ããŒã«å¯èœé åã®äžäžå·Šå³ã®ç«¯ã«ããã£ã³ã°ã远å ããŸããããã¯ã¹ã¯ããŒã«ã³ã³ããã«é©çšãããŸãã
åºå®ããããŒã®æèã§ã¯ãéåžžscroll-margin-top
ãæãé¢é£æ§ã®é«ãããããã£ã§ããããããã¬ã€ã¢ãŠãã«ãã£ãŠã¯ä»ã®ããŒãžã³ã調æŽããå¿
èŠããããããããŸããã
åºå®ããããŒã®ãªãã»ããã«scroll-margin-top
ã䜿çšãã
scroll-margin
ã®æãäžè¬çãªäœ¿çšäŸã¯ãåºå®ããããŒãååšããå Žåã«ã¢ã³ã«ãŒãªã³ã¯ããªãã»ãããããããšã§ãã以äžã«ãã®å®è£
æ¹æ³ã瀺ããŸãã
- åºå®ããããŒã®é«ããæ±ºå®ããïŒ ãã©ãŠã¶ã®éçºè
ããŒã«ã䜿çšããŠåºå®ããããŒã調æ»ãããã®é«ããæ±ºå®ããŸãããã®å€ã
scroll-margin-top
ã«äœ¿çšããŸããäŸãã°ãããããŒã60ãã¯ã»ã«ã®é«ãã§ããã°ãscroll-margin-top: 60px;
ã䜿çšããŸãã - ã¿ãŒã²ããèŠçŽ ã«
scroll-margin-top
ãé©çšããïŒ ãªãã»ããããããèŠçŽ ãéžæããŸãããããã¯éåžžãèŠåºãïŒ<h1>
,<h2>
,<h3>
ãªã©ïŒãã¢ã³ã«ãŒãªã³ã¯ãæãã»ã¯ã·ã§ã³ã§ãã
äŸïŒåºæ¬çãªå®è£
é«ã70ãã¯ã»ã«ã®åºå®ããããŒããããšããŸãã以äžã®CSSã䜿çšããŸãã
h2 {
scroll-margin-top: 70px;
}
ãã®CSSã«ãŒã«ã¯ãã¢ã³ã«ãŒãªã³ã¯ã<h2>
èŠçŽ ãã¿ãŒã²ããã«ããéã<h2>
èŠçŽ ã®äžéšãšãã¥ãŒããŒãã®äžéšã®éã«å°ãªããšã70ãã¯ã»ã«ã®ã¹ããŒã¹ãããäœçœ®ãŸã§èŠçŽ ãã¹ã¯ããŒã«ãããããã©ãŠã¶ã«æç€ºããŸããããã«ãããåºå®ããããŒãèŠåºããèŠãé ãã®ãé²ããŸãã
äŸïŒè€æ°ã®èŠåºãã¬ãã«ã«é©çšãã
ããŒãžå
šäœã§äžè²«ããæåãä¿èšŒããããã«ãè€æ°ã®èŠåºãã¬ãã«ã«scroll-margin-top
ãé©çšã§ããŸãã
h1, h2, h3 {
scroll-margin-top: 70px;
}
äŸïŒç¹å®ã®ã»ã¯ã·ã§ã³ã«ã¯ã©ã¹ã䜿çšãã
ãã¹ãŠã®èŠåºãã察象ã«ãã代ããã«ãç¹å®ã®ã»ã¯ã·ã§ã³ã«ã®ã¿ãªãã»ãããé©çšãããå ŽåããããããããŸãããããã¯ããããã®ã»ã¯ã·ã§ã³ã«ã¯ã©ã¹ã远å ããããšã§å®çŸã§ããŸãã
<section id="introduction" class="scroll-offset">
<h2>Introduction</h2>
<p>...</p>
</section>
.scroll-offset {
scroll-margin-top: 70px;
}
ä»£æ¿æ¡ãšããŠscroll-padding-top
ã䜿çšãã
scroll-padding-top
ã¯åãçµæãéæããããã®ä»£æ¿ã¢ãããŒããæäŸããŸããã¿ãŒã²ããèŠçŽ ã«ããŒãžã³ã远å ãã代ããã«ãã¹ã¯ããŒã«ã³ã³ããã®äžéšã«ããã£ã³ã°ã远å ããŸãã
scroll-padding-top
ã䜿çšããã«ã¯ãéåžž<body>
èŠçŽ ã«é©çšããŸãã
body {
scroll-padding-top: 70px;
}
ããã¯ãã©ãŠã¶ã«å¯ŸããããŒãžã®ã¹ã¯ããŒã«å¯èœé åã®äžéšã«70ãã¯ã»ã«ã®ããã£ã³ã°ãæã€ã¹ãã ãšäŒããŸããã¢ã³ã«ãŒãªã³ã¯ãã¯ãªãã¯ããããšããã©ãŠã¶ã¯ã¿ãŒã²ããèŠçŽ ããã¥ãŒããŒãã®äžéšãã70ãã¯ã»ã«äžã®äœçœ®ãŸã§ã¹ã¯ããŒã«ãã广çã«åºå®ããããŒãåé¿ããŸãã
scroll-margin
ãšscroll-padding
ã®ã©ã¡ããéžã¶ã
scroll-margin
ãšscroll-padding
ã®ã©ã¡ããéžã¶ãã¯ãå€ãã®å Žåãå人ã®å¥œã¿ããŠã§ããµã€ãã®ç¹å®ã®ã¬ã€ã¢ãŠãã«äŸåããŸããæ±ºå®ã«åœ¹ç«ã€æ¯èŒã以äžã«ç€ºããŸãã
scroll-margin
:- ã¿ãŒã²ããèŠçŽ ã«é©çšãããŸãã
- åã ã®èŠçŽ ã«å¯ŸããŠãããã现ããå¶åŸ¡ãå¯èœã§ãã
- ç°ãªãã»ã¯ã·ã§ã³ã§ç°ãªããªãã»ãããå¿ èŠãªå Žåã«äŸ¿å©ã§ãã
scroll-padding
:- ã¹ã¯ããŒã«ã³ã³ããïŒéåžžã¯
<body>
ïŒã«é©çšãããŸãã - ããŒãžå šäœã§äžè²«ãããªãã»ãããå®è£ ããã®ãããç°¡åã§ãã
- ç°ãªãã»ã¯ã·ã§ã³ã§ç°ãªããªãã»ãããå¿ èŠãªå Žåã«ã¯é©ããŠããªããããããŸããã
- ã¹ã¯ããŒã«ã³ã³ããïŒéåžžã¯
ã»ãšãã©ã®å ŽåãèŠåºããã»ã¯ã·ã§ã³ã«scroll-margin
ã䜿çšããæ¹ããããæè»æ§ããããã奜ãŸããã¢ãããŒãã§ããããããåºå®ããããŒãæã€ã·ã³ãã«ãªã¬ã€ã¢ãŠãã§ææ©ã解決çãæ±ããŠããå Žåã¯ãscroll-padding
ãè¯ãéžæè¢ãšãªãåŸãŸãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
ä¿å®æ§ã®ããã®CSS倿°ã®äœ¿çš
ä¿å®æ§ãåäžãããããã«ãCSS倿°ã䜿çšããŠåºå®ããããŒã®é«ããä¿åããããšãã§ããŸããããã«ãããããããŒã®é«ãã倿Žãããå Žåã«ã1ãæã§ãªãã»ãããç°¡åã«æŽæ°ã§ããŸãã
:root {
--header-height: 70px;
}
h1, h2, h3 {
scroll-margin-top: var(--header-height);
}
/* Example of usage with scroll-padding-top */
body {
scroll-padding-top: var(--header-height);
}
åçãªããããŒã®é«ããžã®å¯Ÿå¿
å Žåã«ãã£ãŠã¯ãåºå®ããããŒã®é«ããåçã«å€åããããšããããŸããäŸãã°ãç»é¢ãµã€ãºãç°ãªããšããããŠãŒã¶ãŒãããŒãžãäžã«ã¹ã¯ããŒã«ãããšããªã©ã§ãããã®ãããªç¶æ³ã§ã¯ãJavaScriptã䜿çšããŠscroll-margin-top
ãscroll-padding-top
ãåçã«æŽæ°ããå¿
èŠããããŸãã
以äžã«ããã®åºæ¬çãªäŸã瀺ããŸãã
function updateScrollMargin() {
const headerHeight = document.querySelector('header').offsetHeight;
document.documentElement.style.setProperty('--header-height', `${headerHeight}px`);
}
// Call the function on page load and when the window is resized
window.addEventListener('load', updateScrollMargin);
window.addEventListener('resize', updateScrollMargin);
ãã®JavaScriptã³ãŒãã¯ã<header>
èŠçŽ ã®é«ããååŸããããã«å¿ããŠCSS倿°--header-height
ãèšå®ããŸãããããŠCSSã¯ããã®å€æ°ã䜿çšããŠscroll-margin-top
ãŸãã¯scroll-padding-top
ãèšå®ããŸãã
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
scroll-margin
ãšscroll-padding
ã¯äž»ã«èŠèŠçãªåé¡ã«å¯ŸåŠããŸãããã¢ã¯ã»ã·ããªãã£ãèæ
®ããããšãäžå¯æ¬ ã§ãã远å ãããªãã»ããããã¹ã¯ãªãŒã³ãªãŒããŒãããŒããŒãããã²ãŒã·ã§ã³ã«äŸåãããŠãŒã¶ãŒã«æªåœ±é¿ãäžããªãããã«ããŠãã ããã
- ããŒããŒãããã²ãŒã·ã§ã³ïŒ ããŒããŒãã®ã¿ã䜿çšããŠãŠã§ããµã€ãããã¹ããããŠãŒã¶ãŒããã¹ãŠã®èŠçŽ ã«ç°¡åã«ããã²ãŒãããŠå¯Ÿè©±ã§ããããšã確èªããŠãã ããã
- ã¹ã¯ãªãŒã³ãªãŒããŒïŒ ã¹ã¯ãªãŒã³ãªãŒããŒãæ£ããã³ã³ãã³ããèªã¿äžããã¢ã³ã«ãŒãªã³ã¯ãã¯ãªãã¯ãããåŸã«æå³ããèŠçŽ ã«ãã©ãŒã«ã¹ã眮ãããããšã確èªããŠãã ããã
ã»ãšãã©ã®å Žåãscroll-margin
ãšscroll-padding
ã®ããã©ã«ãã®æåã¯ã¢ã¯ã»ã·ãã«ã§ããããããäºæãã¬åé¡ããªãããšã確èªããããã«ãæ¯æŽæè¡ã§ãŠã§ããµã€ãããã¹ãããããšã¯åžžã«è¯ãç¿æ
£ã§ãã
ãã©ãŠã¶ã®äºææ§
scroll-margin
ãšscroll-padding
ã¯åªãããã©ãŠã¶äºææ§ãæã£ãŠããŸããChromeãFirefoxãSafariãEdgeãOperaãå«ããã¹ãŠã®ã¢ãã³ãã©ãŠã¶ã§ãµããŒããããŠããŸããå€ããã©ãŠã¶ã§ã¯ãããã®ããããã£ããµããŒããããŠããªããããããŸãããããã®å Žåã¯ã°ã¬ãŒã¹ãã«ã«ãã°ã¬ãŒãããŸããã€ãŸããã¢ã³ã«ãŒãªã³ã¯ã¯æ©èœããŸããããªãã»ããã¯é©çšãããŸããã
å€ããã©ãŠã¶ãšã®äºææ§ã確ä¿ããããã«ãããªãã£ã«ãCSSã®åé¿çã䜿çšããããšãã§ããŸããããããã»ãšãã©ã®å ŽåããŠãŒã¶ãŒã®å€§å€æ°ããããã®ããããã£ããµããŒãããã¢ãã³ãã©ãŠã¶ã䜿çšããŠãããããããããå¿ èŠã¯ãããŸããã
äžè¬çãªåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
以äžã¯ãscroll-margin
ãšscroll-padding
ã䜿çšããéã«ééããå¯èœæ§ã®ããäžè¬çãªåé¡ãšããã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ãã³ãã§ãã
- ãªãã»ãããæ©èœããªãïŒ
scroll-margin-top
ãŸãã¯scroll-padding-top
ãæ£ããèŠçŽ ã«é©çšããŠãããå確èªããŠãã ããã- åºå®ããããŒã®é«ããæ£ç¢ºã§ããããšã確èªããŠãã ããã
- ãã©ãŠã¶ã®éçºè ããŒã«ã䜿çšããŠèŠçŽ ã調æ»ããç«¶åããCSSã«ãŒã«ããªãã確èªããŠãã ããã
- ãªãã»ããã倧ããããããŸãã¯å°ããããïŒ
- åžæã®ãªãã»ãããåŸããããŸã§
scroll-margin-top
ãŸãã¯scroll-padding-top
ã®å€ã調æŽããŠãã ããã - 1ãæã§ãªãã»ãããç°¡åã«èª¿æŽã§ããããã«ãCSS倿°ã®äœ¿çšãæ€èšããŠãã ããã
- åžæã®ãªãã»ãããåŸããããŸã§
- ç»é¢ãµã€ãºã«ãã£ãŠãªãã»ãããç°ãªãïŒ
- ã¡ãã£ã¢ã¯ãšãªã䜿çšããŠãç»é¢ãµã€ãºã«å¿ããŠ
scroll-margin-top
ãŸãã¯scroll-padding-top
ã®å€ã調æŽããŠãã ããã - ããããŒã®é«ããç»é¢ãµã€ãºã«ãã£ãŠå€ããå Žåã¯ãJavaScriptã䜿çšããŠãªãã»ãããåçã«æŽæ°ããŠãã ããã
- ã¡ãã£ã¢ã¯ãšãªã䜿çšããŠãç»é¢ãµã€ãºã«å¿ããŠ
å®éã®äœ¿çšäŸ
人æ°ã®ãããŠã§ããµã€ãã§scroll-margin
ãšscroll-padding
ãã©ã®ããã«äœ¿çšãããŠããããããã€ãã®å®éã®äŸãèŠãŠã¿ãŸãããã
- ããã¥ã¡ã³ããŒã·ã§ã³ãµã€ãïŒ MDN Web DocsãVue.jsã®ããã¥ã¡ã³ããŒã·ã§ã³ãªã©ãå€ãã®ããã¥ã¡ã³ããŒã·ã§ã³ãµã€ãã§ã¯ãã¢ã³ã«ãŒãªã³ã¯ããªãã»ãããããèŠåºããåºå®ããããŒã§é ããªãããã«ããããã«
scroll-margin
ã䜿çšããŠããŸãã - ããã°ãµã€ãïŒ ããã°ãµã€ãã§ã¯ãåºå®ããããŒã®ããé·ãèšäºãããã²ãŒãããéã®ãŠãŒã¶ãŒäœéšãåäžãããããã«ããã°ãã°
scroll-margin
ã䜿çšãããŸãã - ã¯ã³ããŒãžãµã€ãïŒ ã¯ã³ããŒãžãµã€ãã§ã¯ãç°ãªãã»ã¯ã·ã§ã³éã®ã¹ã ãŒãºãªã¹ã¯ããŒã«äœéšãäœãåºãããã«ãé »ç¹ã«
scroll-padding
ã䜿çšãããŸãã
ãããã®äŸã¯ãscroll-margin
ãšscroll-padding
ã®å€æ§æ§ãšãããããããŸããŸãªãŠã§ããµã€ãã§ãŠãŒã¶ãŒäœéšãåäžãããããã«ã©ã®ããã«äœ¿çšã§ãããã瀺ããŠããŸããäŸãã°ããã³ã¬ããŒã«ã«æ ç¹ã眮ããœãããŠã§ã¢äŒç€ŸãäœçŸããŒãžãã®ãªã³ã©ã€ã³ããã¥ã¡ã³ããŒã·ã§ã³ããŒã¿ã«ãç¶æããŠãããšããŸããåèŠåºãã«`scroll-margin`ã䜿çšããããšã§ããŠãŒã¶ãŒã®ããã€ã¹ããã©ãŠã¶ã«é¢ä¿ãªããäžè²«ããŠã¹ã ãŒãºãªäœéšãä¿èšŒãããŸãã
çµè«
scroll-margin
ãšscroll-padding
ã¯ãåºå®ããããŒãæã€ãŠã§ããµã€ãã§ã¹ã ãŒãºã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªããã²ãŒã·ã§ã³äœéšãäœãåºãããã«äžå¯æ¬ ãªCSSããããã£ã§ãããããã®ããããã£ãã©ã®ããã«æ©èœãã广çã«é©çšããæ¹æ³ãçè§£ããããšã§ããŠãŒã¶ãŒãã€ã©ã€ã©ããããšãªããŠã§ããµã€ããç°¡åã«ããã²ãŒãããæ¢ããŠããã³ã³ãã³ããèŠã€ããããããã«ããããšãã§ããŸããã·ã³ãã«ãªããã°ããããµã³ããŠããã·ã³ã¬ããŒã«ã®ãããªå€æ§ãªåžå Žã®é¡§å®¢ãã¿ãŒã²ããã«ããè€éãªeã³ããŒã¹ãã©ãããã©ãŒã ãŸã§ã`scroll-margin`ãå®è£
ããããšã§ãäžè²«ããŠå¿«é©ã§çŽæçãªããã²ãŒã·ã§ã³ãä¿èšŒãããããã«ãã£ãŠãŠã§ããµã€ãã®äœ¿ãããããšå
šäœçãªæåãåäžããŸããããããããã®ããããã£ã掻çšããããªãã®ãŠã§ããããžã§ã¯ãã®ãŠãŒã¶ãŒäœéšã仿¥ããåäžãããŸãããïŒ